package persistencia;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import modeloDatos.*;

public class DAOCursos {

	private Connection conn;

	public DAOCursos(){
		
	}
	
	public void finalize(){
        ConnectionManager.getInstance().checkIn(conn);
    }
	
	public Grupo getGrupoCurso(String idGrupo){
		Grupo grp = null;
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT g.idGrupo, g.idCurso, g.numeroGrupo, g.numeroAlumnosMax, " +
				"g.numeroAlumnosActuales, g.aula, g.fechaInicio, g.fechaFin, p.descripcion, " +
				"m.descripcion, s.descripcion, g.horasPredefinidas, g.diasLectivos, g.observaciones " +
				"FROM grupos g,plataformasgrupos p, modalidad m, situacionesgrupos s WHERE g.idGrupo = ? AND " +
				"g.idPlataforma = p.idPlataforma AND g.idModalidad = m.idModalidad AND s.idSituacion = g.idSituacion";
		ResultSet rs = null;
		try{
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, idGrupo);
			rs = stmt.executeQuery();
			if(rs.next()){
				String idCurso = rs.getString(2);
				String numeroGrupo = rs.getString(3);
				Integer numeroAlumnosMax = rs.getInt(4);
				Integer alumnosActuales = rs.getInt(5);
				String aula = rs.getString(6);
				java.sql.Date inicio = rs.getDate(7);
				java.sql.Date fin = rs.getDate(8);
				String plataforma = rs.getString(9);
				String modalidad = rs.getString(10);
				String situacion = rs.getString(11);
				Integer horasPredef = rs.getInt(12);
				Integer diasLectivos = rs.getInt(13);
				String observaciones = rs.getString(14);
				grp = new Grupo(idCurso, numeroGrupo, numeroAlumnosMax, 
						alumnosActuales, aula, inicio, fin, plataforma, modalidad, 
						situacion, horasPredef, diasLectivos, observaciones);
				
			}
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (rs != null) {
					rs.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		return grp;
	}
	
	public TutorCurso getTutorGrupo(int idTutor, Integer idGrupo) {
		TutorCurso grupo = null;
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT * FROM tutorgrupo WHERE idTutor = ? AND idGrupo = ?";
		ResultSet result = null;
		try {
			stmt = conn.prepareStatement(sql);
			stmt.setInt(1, idTutor);
			stmt.setInt(2, idGrupo);
			result = stmt.executeQuery();
			while (result.next()) {
				String idCurso = result.getString("idCurso");
				java.sql.Date inicio = result.getDate("fechaInicio");
				java.sql.Date fin = result.getDate("fechaFin");
				Integer diasDocentes = result.getInt("diasDocentes");
				Integer numeroHoras = result.getInt("numeroHoras");
				Double evaluacion = result.getDouble("evaluacion");
				String user = result.getString("usuario");
				String pass = result.getString("clave");
				grupo = new TutorCurso(idCurso, inicio, fin, diasDocentes, numeroHoras, evaluacion, user, pass, idGrupo.toString());

				
			}
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (result != null) {
					result.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		
		return grupo;
	}
	
	public List<TutorCurso> getCursosTutor(int idTutor){
		List<TutorCurso> cursos = new ArrayList<TutorCurso>();
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT * FROM tutorgrupo WHERE idTutor = ?";
		ResultSet result = null;
		try {
			stmt = conn.prepareStatement(sql);
			stmt.setInt(1, idTutor);
			result = stmt.executeQuery();
			while (result.next()) {
				String idCurso = result.getString("idCurso");
				java.sql.Date inicio = result.getDate("fechaInicio");
				java.sql.Date fin = result.getDate("fechaFin");
				Integer diasDocentes = result.getInt("diasDocentes");
				Integer numeroHoras = result.getInt("numeroHoras");
				Double evaluacion = result.getDouble("evaluacion");
				String user = result.getString("usuario");
				String pass = result.getString("clave");
				String idGrupo = result.getString("idGrupo");
				
				TutorCurso tc = new TutorCurso(idCurso,inicio,fin,diasDocentes,numeroHoras,evaluacion,user,pass,idGrupo);
				cursos.add(tc);
				
			}
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (result != null) {
					result.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		
		return cursos;
	}

	public void setPeriodoImparticion(int idTutor, int idGrupo, Date fInicio,
			Date fFin) {
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "UPDATE tutorgrupo SET fechaInicio=?,fechaFin=? WHERE idTutor = ? AND idGrupo = ?";
		try {
			stmt = conn.prepareStatement(sql);
			
			stmt.setDate(1, fInicio);
			stmt.setDate(2, fFin);
			stmt.setInt(3, idTutor);
			stmt.setInt(4, idGrupo);
			stmt.execute();
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		
		
	}

	public void setEvaluacion(int idTutor, int idGrupo, double valor) {
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "UPDATE tutorgrupo SET evaluacion=? WHERE idTutor = ? AND idGrupo = ?";
		try {
			stmt = conn.prepareStatement(sql);
			
			stmt.setDouble(1, valor);
			stmt.setInt(2, idTutor);
			stmt.setInt(3, idGrupo);
			stmt.execute();
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
		
		
	}

	public void setUserPass(int idTutor, int idGrupo, String userT, String passT) {
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "UPDATE tutorgrupo SET usuario=?, clave=? WHERE idTutor = ? AND idGrupo = ?";
		try {
			stmt = conn.prepareStatement(sql);
			
			stmt.setString(1, userT);
			stmt.setString(2, passT);
			stmt.setInt(3, idTutor);
			stmt.setInt(4, idGrupo);
			stmt.execute();
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
	}

	public void setParametrosTemporales(int idTutor, int idGrupo,int diasDocentes, int numeroHoras) {
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "UPDATE tutorgrupo SET diasDocentes=?, numeroHoras=? WHERE idTutor = ? AND idGrupo = ?";
		try {
			stmt = conn.prepareStatement(sql);
			
			stmt.setInt(1, diasDocentes);
			stmt.setInt(2, numeroHoras);
			stmt.setInt(3, idTutor);
			stmt.setInt(4, idGrupo);
			stmt.execute();
		} catch (SQLException ex) {
			System.out.println("Message: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("ErrorCode: " + ex.getErrorCode());
		} finally {
			finalize();
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException ex) {
			}
		}
	}


}
